package com.example.multilevelapprovalback.mapper;

import com.example.multilevelapprovalback.pojo.TeachingProject;
import com.example.multilevelapprovalback.pojo.TeachingProjectExcel;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.time.Year;
import java.util.List;

@Mapper
public interface TeachProjMapper {
    /**
     * 添加教学项目
     * @param teachingProject
     */
    @Insert("insert into teaching_project(code_number,job_number, achievement_type_id, project_name, achievement_level_id, year, " +
            "leader, others,other_job_number, comment, attachment, status_id, create_time, update_time)" +
            "values (#{codeNumber},#{jobNumber},#{achievementTypeId},#{projectName},#{achievementLevelId},#{year}," +
            "#{leader},#{others},#{otherJobNumber},#{comment},#{attachment},#{statusId},#{createTime},#{updateTime})")
    void add(TeachingProject teachingProject);
    /**
     * 更新教学项目
     * @param teachingProject
     */
    void update(TeachingProject teachingProject);
    /**
     * 批量删除教学项目
     * @param ids
     */
    void delete(@Param("ids") List<String> ids);
    /**
     * 查询教学项目
     * @param name
     * @param jobNumber
     * @param startTime
     * @param endTime
     * @param statusId
     * @param projectName
     * @return
     */
    List<TeachingProject> list(@Param("name") String name, @Param("jobNumber") String jobNumber, @Param("startTime") String startTime,
                               @Param("endTime") String endTime,@Param("statusId") Integer statusId, @Param("projectName") String projectName);
    /**
     * 批量插入教学项目
     * @param list
     */
    void batchInsert(List<TeachingProjectExcel> list);
    /**
     * 教师的查询教学项目
     * @param jobNumber
     * @param statusId
     * @return
     */
    List<TeachingProject> teacherList(@Param("jobNumber") String jobNumber, @Param("statusId") Integer statusId);
    /**
     * 教师根据教学项目或获批年度搜索查询教学项目
     * @param jobNumber
     * @param startTime
     * @param endTime
     * @param statusId
     * @param projectName
     * @return
     */
    List<TeachingProject> teacherSearchList(@Param("jobNumber") String jobNumber, @Param("startTime") String startTime,
                                            @Param("endTime") String endTime, @Param("statusId") Integer statusId,
                                            @Param("projectName") String projectName);
    /**
     * 教师根据教学项目或获批年度搜索查询教学项目，在具体模块显示>=statusId的项目
     * @param name
     * @param jobNumber
     * @param startTime
     * @param endTime
     * @param statusId
     * @param projectName
     * @return
     */
    List<TeachingProject> teacherSearchAllList(@Param("name") String name,@Param("jobNumber") String jobNumber,
                                               @Param("startTime") String startTime, @Param("endTime") String endTime,
                                               @Param("statusId") Integer statusId, @Param("projectName") String projectName);
    /**
     * 查询标记的教学项目
     * @param jobNumber
     * @param mark
     * @return
     */
    List<TeachingProject> markList(@Param("jobNumber")String jobNumber, @Param("mark")Integer mark);
    /**
     * 查询指定项目状态的教学项目
     * @param jobNumber
     * @param statusId
     * @param statusIds
     * @return
     */
    List<TeachingProject> teacherListBystatusIds(@Param("jobNumber")String jobNumber, @Param("statusId")Integer statusId,
                                                 @Param("statusIds")List<Integer> statusIds, @Param("levelIds") List<Integer> levelIds);
    /**
     * 教师根据教学项目或获批年度搜索查询指定状态的教学项目
     * @param jobNumber
     * @param startTime
     * @param endTime
     * @param statusId
     * @param projectName
     * @param statusIds
     * @return
     */
    List<TeachingProject> teacherSearchListBystatusIds(@Param("jobNumber") String jobNumber, @Param("startTime") String startTime,
                                                       @Param("endTime") String endTime, @Param("statusId") Integer statusId,
                                                       @Param("projectName") String projectName, @Param("statusIds") List<Integer> statusIds,
                                                       @Param("levelIds") List<Integer> levelIds);
    /**
     * 查询需要审核的项目
     * @param statusId
     * @return
     */
    List<TeachingProject> checkNum(@Param("statusId")Integer statusId);
    /**
     * 批量更新教学项目
     * @param teachingProjects
     */
    void batchUpdate(@Param("teachingProjects") List<TeachingProject> teachingProjects);
    /**
     * 批量更新教学项目
     * @param jobNumber
     */
    @Select("select count(*) from teaching_project where job_number=#{jobNumber}")
    Integer number(@Param("jobNumber")String jobNumber);
}
